const obj = {
    date: [2, 4, 6],
    teachers: {
      袁老师: 'mp,flutter',
      翠花老师: 'interview',
      韩老师: 'webpack,perf',
      高老师: 'react',
      夏老师: 'nodejs,wechat,safe',
      罗老师: 'rn',
      盛老师: 'end,project,algorithm,pattern,react-src,manage',
      杨老师: 'vue',
      崔老师: 'test'
    },
    details: [
      {
        title: 'vue01 全家桶原理和实现',
        content: `
            响应式
            计算属性
                  `,
        catg: 'vue',
      },
      {
        title: 'vue02 手写vue',
        content: `
          响应式
          dom编程 
                `,
        catg: 'vue',
      },
      {
        title: 'vue03 vue2源码剖析01',
        content: `
          vue初始化流程
          数据响应式       
                `,
        catg: 'vue',
      },
      {
        title: 'vue04 vue2源码剖析02',
        content: `
          异步更新
          虚拟dom+patch算法
              `,
        catg: 'vue',
      },
      {
        title: 'vue05 vue2源码剖析03',
        content: `
          组件化原理
          手写vue2
              `,
        catg: 'vue',
      },
      {
        title: 'vue06 通用组件库开发实战',
        content: `
           组件通信
           组件实例化
                `,
        catg: 'vue',
      },
      {
        title: 'vue07 vue项目最佳实践',
        content: `
           配置策略
           权限管理
           导航菜单生成
           数据封装和模拟
                  `,
        catg: 'vue',
      },
      {
        title: 'vue08 vue3源码剖析01',
        content: `
           vue3初始化流程
           自定义渲染器
              `,
        catg: 'vue',
      },
      {
        title: 'vue09 vue3源码剖析02',
        content: `
           异步更新策略
           数据响应式原理                    
                `,
        catg: 'vue',
      },
      {
        title: 'vue10 vue3源码剖析03',
        content: `
           编译器原理
           异步更新策略
           虚拟dom+patch算法
                `,
        catg: 'vue',
      },
      {
        title: 'React01 React组件化',
        content: `
                    1.组件跨层级通信
                    2.设计并实现表单控件
                    3.高阶组件  
                    4.实现弹窗类组件`,
        catg: 'react',
      },
      {
        title: 'React02 Redux、中间件的使用及源码',
        content: `
                  1.使用redux
                  2.使用redux中间件
                  3.实现redux、中间件`,
        catg: 'react',
      },
      {
        title: 'React03 Hooks和react-redux使用及源码',
        content: `
                  1.Hooks API
                  2.react-redux使用
                  3.实现react-redux
                  4.react-router使用`,
        catg: 'react',
      },
      {
        title: 'React04 react-router使及源码',
        content: ` 
                  1.react-router使用
                  2.路由守卫
                  3.路由hooks方法使用及实现
                  4.实现Router、BrowserRouter、HashRouter、Route、Link、Switch、Redirect等`,
        catg: 'react',
      },
      {
        title: 'React05 企业级最佳实践01',
        content: `
                  1.generator
                  2.redux-saga
                  3.项目搭建`,
        catg: 'react',
      },
      {
        title: 'React06 企业级最佳实践02',
        content: `
                1.umi+dva搭建项目
                2.路由配置
                3.按需加载
                4.umi+dva核心原理解析`,
        catg: 'react',
      },
      {
        title: '休息',
        content: `
             休息
                 `,
  
        catg: 'rest',
      },
      {
        title: 'React07 React原理解析01',
        content: `
                  1.虚拟DOM
                  2.JSX
                  3.React核心API查看
                  4.实现React.createElement, ReactDom.render, Component`,
        catg: 'react',
      },
      {
        title: 'React08 React原理解析02',
        content: `
                  1.协调
                  2.diff
                  3.fiber结构实现初次渲染`,
        catg: 'react',
      },
      {
        title: 'React09 React原理解析03',
        content: `
                  1.Hook原理
                  2.fiber结构实现更新
                  3.FunctionComponent源码解读`,
        catg: 'react',
      },
      {
        title: 'React10 React原理解析04',
        content: `
                  1.React源码中的协调解读与实现
                  2.任务调度流程
                  3.合成事件
                  4.setState的同步与异步
                  5.常见组件优化技术总结`,
        catg: 'react',
      },
      {
        title: 'Nodejs01 基础API与CLI',
        content: `
                  异步I/O Stream Buffer Http
                  手写一个CLI工具
                  `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs02 Koa源码',
        content: `
            context上下文
            中间件机制
            router中间件
            静态服务中间件
          `,
        catg: 'nodejs',
      },
      {
        title: '休息',
        content: `
             休息
                 `,
  
        catg: 'rest',
      },
      {
        title: 'Nodejs03 网络编程',
        content: `
                    socket套接字编程
                    http协议 跨域 反向代理 爬虫 反向代理 bodyparser
                    上传原理
                    websocket
          `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs04 Mysql',
        content: `
                    mysql 
                    sequelize
                    电商sequlize实战
                    `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs05 Mongoose',
        content: `
                    mongo native
                    mongoose
                    零编码Restful
                  `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs06 鉴权',
        content: `
                    cookie-session
                    token jwt原理解析
                    扩展Oauth2 与 SSO单点登录
          `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs07 eggjs原理解析',
        content: `
                    实现一个MVC框架
                    约定优于配置 控制器层 服务层 实体层
                    定时器 中间件
          `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs08 eggjs最佳实践',
        content: `
                    swager 接口文档
                    plugin
                    restful服务
                    表单校验
                    jwt鉴权
                    生命周期函数 初始化数据
                    上传upload
          `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs09 手写TS装饰器',
        content: `
                    装饰器与AOP
                    路由装饰器
                    校验装饰器
                    模型装饰器
          `,
        catg: 'nodejs',
      },
      {
        title: 'Nodejs10 部署_Docker_自动化部署',
        content: `
                      部署 cluster模块、PM2、静态服务、反向代理
                      docker基础
                      github webhooks 自动化部署
                      `,
        catg: 'nodejs',
      },
      {
        title: '微信公众号开发',
        content: `
                    ngrok
                    消息接口
                    服务器端接口调用
          `,
        catg: 'wechat',
      },
      {
        title: '前端安全 常见攻击手段攻防演练',
        content: `
                    XSS、CSRF、点击劫持、SQL注入、OS注入、DDOS简介
          `,
        catg: 'safe',
      },
      {
        title: '工程化01',
        content: '工程化01',
        catg: 'webpack',
      },
      {
        title: '工程化02 进阶',
        content: '工程化02',
        catg: 'webpack',
      },
      {
        title: '工程化03',
        content: '工程化03',
        catg: 'webpack',
      },
      {
        title: '工程化04',
        content: '工程化03',
        catg: 'webpack',
      },
      {
        title: '工程化05',
        content: 'webpack源码',
        catg: 'webpack',
      },
      {
        title: '项目课',
        content: `
            项目先导课
            整体架构分析
                      `,
        catg: 'project',
      },
      {
        title: '休息',
        content: `
             休息
                 `,
  
        catg: 'rest',
      },
      {
        title: 'React-native01',
        content: 'React-native01',
        catg: 'rn',
      },
      {
        title: 'React-native02',
        content: 'React-native02',
        catg: 'rn',
      },
      {
        title: 'React-native03',
        content: 'React-native03',
        catg: 'rn',
      },
      {
        title: 'React-native04',
        content: 'React-native04',
        catg: 'rn',
      },
      {
        title: '小程序-01：微信原生小程序+云开发',
        content: '微信小程序云开发',
        catg: 'mp',
      },
      {
        title: '小程序-02：Uni-App跨端云开发实战',
        content: '跨端云开发',
        catg: 'mp',
      },
      {
        title: '小程序-03：Taro跨端开发+小程序高频需求实战',
        content: 'Taro跨端开发',
        catg: 'mp',
      },
      {
        title: 'flutter01',
        content: 'flutter实战',
        catg: 'flutter',
      },
      {
        title: 'flutter02',
        content: 'flutter实战',
        catg: 'flutter',
      },
      {
        title: 'flutter03',
        content: 'flutter实战',
        catg: 'flutter',
      },
      {
        title: 'flutter04',
        content: 'flutter实战',
        catg: 'flutter',
      },
      {
        title: '性能分析',
        content: '性能分析',
        catg: 'perf',
      },
      {
        title: '前端视野开阔',
        content: '自动化测试',
        catg: 'test',
      },
      {
        title: '前端团队管理',
        content: '转管理的困惑 管理知识体系 微前端优劣势 软件开发理论 ',
        catg: 'manage',
      },
      {
        title: '面试',
        content: '面试',
        catg: 'interview',
      },
      {
        title: '结课',
        content: '结课',
        catg: 'end',
      },
    ],
  }
  const catgTeachers = {}
  Object.entries(obj.teachers).forEach((val) => {
    const [name, catg] = val
    catg.split(',').forEach((v) => {
      catgTeachers[v] = name
    })
  })
  obj.details.map((v) => {
    v.teacher = catgTeachers[v.catg]
    return v
  })
  
  export default obj
  